package com.xuanwei.core.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xuanwei.core.entity.ao.ProductAttributeAO;
import com.xuanwei.core.entity.ao.ProductSkuAO;
import com.xuanwei.core.entity.vo.ProductListVo;
import com.xuanwei.core.entity.param.ProductParam;
import com.xuanwei.dao.entity.XwProduct;
import com.xuanwei.dao.entity.XwProductParam;
import com.xuanwei.dao.entity.XwProductSku;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author mjy
 * @since 2019-04-25
 */
public interface IXwProductService extends IService<XwProduct> {

    /**
     * 添加商品
     *
     * @param product           商品参数
     * @param operationId       操作ID
     * @param productAttributes 商品属性
     * @param params            商品参数
     * @param productSkus       商品规格
     */
    void add(XwProduct product, Integer operationId,  List<XwProductParam> params, List<ProductAttributeAO> productAttributes, List<ProductSkuAO> productSkus);

    /**
     * 修改商品
     *
     * @param product           商品参数
     * @param operationId       操作ID
     * @param productAttributes 商品属性
     * @param params            商品参数
     * @param productSkus       商品规格
     */
    void update(XwProduct product,Integer operationId, List<XwProductParam> params, List<ProductAttributeAO> productAttributes, List<ProductSkuAO> productSkus);

    /**
     * 操作商品 上架下架
     *
     * @param productId 商品ID
     */
    void handleStatus(Integer productId);

    /**
     * 分页数据
     *
     * @param page    page对象
     * @param name    商品名称
     * @param status  状态
     * @param orderBy 排序
     * @return 商品列表
     */
    Page<ProductListVo> findPage(Page<XwProduct> page, String name, Integer status, Integer orderBy);

    /**
     * 商品详情
     *
     * @param id 商品ID
     * @return 数据
     */
    ProductParam editDetail(Integer id);

    /**
     * 更新标签
     *
     * @param id      商品id
     * @param labelId 标签id
     */
    void updateLabel(Integer id, Integer labelId);

    /**
     * 查询商品的SKU列表
     *
     * @param id 商品ID
     */
    List<ProductSkuAO> findSkuByProductId(Integer id);

    /**
     * 更新商品的sku
     *
     * @param productSku 数据
     */
    void updateSku(XwProductSku productSku, Integer operationId);

    /**
     * 更新sku的状态
     *
     * @param skuId skuID
     */
    void updateSkuStatus(Integer skuId);

    /**
     * 查找商品参数
     *
     * @param id 商品ID
     * @return 数据
     */
    List<XwProductParam> findParams(Integer id);

    /**
     * 修改商品参数
     *
     * @param type      类型 1,新增,2 删除 ,3 修改
     * @param productId 商品ID
     * @param name      参数
     * @param value     值
     */
    void updateParams(Integer type, Integer id, Integer productId, String name, String value);

    /**
     * 查找商品详情
     *
     * @param id 商品ID
     * @return 数据
     */
    String findDetail(Integer id);

    /**
     * 修改商品详情
     *
     * @param id     商品
     * @param detail 详情
     */
    void updateDetail(Integer id, String detail, Integer operationId);


}
